<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>监视属性-天气</title>
    <script type="text/javascript" src="../../../public/vue.js"></script>
</head>
<body>
<div id="root">
    <!--
    深度监视:
        (1).Vue中的watch默认不监测对象内部值的改变(一层).
        (2).配置deep:true可以监测对象内部值改变(多层)。
        备注:
        (1).Vue自身可以监测对象内部值的改变，但Vue提供的watch默认不可以!
        (2).使用watch时根据数据的具体结构，决定是否采用深度监视。
    -->
    <h2>今天天气很{{ info }}</h2>
    <button @click="changeWeather">切换天气</button>
    <br>
    <h3>{{number.a}}</h3>
    <button @click="number.a++">点我a++</button>
</div>
</body>
<script type="text/javascript">
    new Vue({
        el: '#root',
        data: {
            isHost: true,
            number:{
                a:1,
                b:2
            }
        },
        computed: {
            info: function () {
                return this.isHost ? '炎热' : '凉爽'
            }
        },
        methods: {
            changeWeather() {
                this.isHost = !this.isHost
            }
        },
        watch: {
            // 监视谁，怎么做
            isHost: {
                // 什么时候调用handler - isHost发生改变时，handler被调用
                handler(newVal, oldVal) {
                    console.log(newVal + "isHost被修改了" + oldVal)
                },
            },
            // 监视多级数据
            'number.a':{
                handler(newVal,oldVal){
                    console.log(newVal+"number.a被修改了"+oldVal)
                }
            },
            'number.b':{
                handler(newVal,oldVal){
                    console.log(newVal+"number.b被修改了"+oldVal)
                }
            },
            number: {
                deep:true,
                handler(newVal,oldVal){
                    console.log(newVal+"number被修改了"+oldVal)
                }
            }
        }
    })
</script>
</html>